02 Rotas parametrizadas

Próxima Atividade
  • Sugerir melhoria
Carregando vídeo

Transcrição

import { Component } from "@angular/core";

@Component({
    templateUrl: './photo-detail.component.html',
})
export class PhotoDetailComponent implements OnInit { 

    constructor() {}
}
<div class="bg-white border">
    <div class="row">
        <div class="col-lg-8">
            <ap-photo></ap-photo>
        </div>

        <div class="col-lg-4 p-4">
            <small>
                <p class="text-left break-word">?????</p>
                <hr>
            </small>
            <div class="mt-4">

                <form>
                    <div class="input-group">
                        <textarea class="form-control"></textarea>
                        <div class="input-group-append">
                            <button type="submit" class="btn btn-primary pull-left">
                                Publish
                            </button>
                        </div>
                    </div>
                </form>
            </div>
        </div><!-- col-md-4 -->
    </div><!-- row end -->
</div>
import { NgModule } from '@angular/core';
import { Routes, RouterModule } from '@angular/router';

import { PhotoListComponent } from './photos/photo-list/photo-list.component';
import { PhotoFormComponent } from './photos/photo-form/photo-form.component';
import { NotFoundComponent } from './errors/not-found/not-found.component';
import { PhotoListResolver } from './photos/photo-list/photo-list.resolver';
import { AuthGuard } from './core/auth/auth.guard';
import { PhotoDetailComponent } from './photos/photo-detail/photo-detail.component';

const routes: Routes = [
    {
        path: '',
        pathMatch: 'full',
        redirectTo: 'home'
    },
    { 
        path: 'home',
        loadChildren: './home/home.module#HomeModule'
    },              
    { 
        path: 'user/:userName', 
        component: PhotoListComponent,
        resolve: {
            photos: PhotoListResolver
        }
    },
    { 
        path: 'p/add', 
        component: PhotoFormComponent,
        canActivate: [AuthGuard]
    },
    {
        path: 'p/:photoId', // nova rota
        component: PhotoDetailComponent
    },
    { 
        path: '**', 
        component: NotFoundComponent 
    }  
];

@NgModule({
    imports: [ 
        RouterModule.forRoot(routes, { useHash: true } ) 
    ],
    exports: [ RouterModule ]
})
export class AppRoutingModule { }
// app/photos/photo/photo.service.ts
import { HttpClient, HttpParams } from '@angular/common/http';
import { Injectable } from '@angular/core';

import { Photo } from "./photo";

const API = 'http://localhost:3000';

@Injectable({ providedIn: 'root' })
export class PhotoService {

    constructor(private http: HttpClient) {}
    // código anterior omitido 

    findById(id: string) {
        return this.http.get<Photo>(
            API + '/photos/' + id
        );
    }    
}
import { Component } from "@angular/core";
import { ActivatedRouteSnapshot, ActivatedRoute } from "@angular/router";
import { OnInit } from "@angular/core";
import { Photo } from "../photo/photo";
import { PhotoService } from "../photo/photo.service";
import { Observable } from "rxjs";

@Component({
    templateUrl: './photo-detail.component.html',
})
export class PhotoDetailComponent implements OnInit { 

    photo: Photo;

    constructor(
        private route: ActivatedRoute,
        private photoService: PhotoService
    ) {}

    ngOnInit(): void {
        const photoId = this.route.snapshot.params.photoId;
        this.photoService.findById(photoId).subscribe(photo => this.photo = photo);
    }
}    
<div class="bg-white border">
    <div class="row">
        <div class="col-lg-8">
            <ap-photo [url]="photo?.url" [description]="photo?.description"></ap-photo>
        </div>

        <div class="col-lg-4 p-4">
            <small>
                <p class="text-left break-word">{{ photo?.description }}</p>
                <hr>
            </small>
            <div class="mt-4">

                <form>
                    <div class="input-group">
                        <textarea class="form-control"></textarea>
                        <div class="input-group-append">
                            <button type="submit" class="btn btn-primary pull-left">
                                Publish
                            </button>
                        </div>
                    </div>
                </form>
            </div>
        </div><!-- col-md-4 -->
    </div><!-- row end -->
</div>
Tirar dúvida Próxima Atividade
ícone Angular parte 3: upload, build e novos componentes

Angular parte 3: upload, build e novos componentes

100%
Aula03 de 08

Detalhes da foto

Atividades 2 de 8

  • 01 Projeto da aula anterior
  • 02 Rotas parametrizadas 08min
  • 03 Extraindo parâmetros de rotas 08min
  • 04 Segmento de rota
  • 05 Buscando a foto selecionada da API 11min
  • 06 Serviço para obtenção de segmentos de rotas
  • 07 Como fazer?
  • 08 Consolidando seu conhecimento

Aulas

Outros Links

Fórum Trocar Curso
Gravatar de Marcos Katsumi Kay

Marcos Katsumi Kay 34.4k xp

Logo da Alura